package de.schlinke_marius.activities;

import java.util.ArrayList;
import java.util.List;

import android.app.Activity;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteException;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.util.Log;
import android.widget.ProgressBar;
import de.schlinke_marius.R;
import de.schlinke_marius.application.MSComputerApplication;
import de.schlinke_marius.data.AppContainer;
import de.schlinke_marius.data.Example;
import de.schlinke_marius.database.MSCDatabase;

public class Start extends Activity {

	private MSCDatabase database = new MSCDatabase(this);
	private Cursor exampleCursor;
	private static final String TAG = Start.class.getSimpleName();
	
	/*
	 * UI elements
	 */
	private ProgressBar pbStartProgress = null;

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_start);
	    initializeViewElements();
		
		
		/** set time to splash out */
		final int welcomeScreenDisplay = 3000;
		/** create a thread to show splash up to splash time */

		database.getWritableDatabase();
		Cursor examplesCursor = database.getExamples();
		Log.i("EXAMPLESSIZE", " SIZE: " + examplesCursor.getCount());


		exampleCursor = database.getExamples();
		int examplesSize = exampleCursor.getCount();

		if (examplesSize == 0) {

			long retA = insertExamples();
			long retB = insertBenchmark();
			long retC = insertHardware();
			long retD = insertHardwareToExamples();
			long retE = insertIntoGalleryPictures();
			long retF = insertIntoQuestions();
			long retG = insertIntoAnswers();
			Log.i("INSERTED", " A: " + retA + " B: " + retB + " C;" + retC
					+ " D: " + retD + " E:" + retE + " F: " + retF + " G: " + retG);
		} else {

		}
		createListItems();

		Thread welcomeThread = new Thread() {

			int wait = 0;

			@Override
			public void run() {
				try {
					super.run();
					/**
					 * use while to get the splash time. Use sleep() to increase
					 * the wait variable for every 100L. *
					 * 
					 */

					while (wait < welcomeScreenDisplay) {
						sleep(100);
						wait += 100;
						if (pbStartProgress != null) {
							pbStartProgress.setProgress(wait/100);
						}
						Log.d(TAG, "Progress: " + wait/100);
					}
				} catch (Exception e) {
					System.out.println("EXc=" + e);
				} finally {
					/**
					 * Called after splash times up. Do some action after splash
					 * times up. Here we moved to another main activity class
					 */

					startActivity(new Intent(Start.this, MainTabActivity.class));
					finish();
				}
			}
		};
		welcomeThread.start();

	}
	
	private void initializeViewElements() {
		pbStartProgress = (ProgressBar) findViewById(R.id.pbStartProgress);
	}

	private long insertExamples() {

		Log.i("INSERTINTOEXAMPLES", "insertExamples is called");

		//Benchmark Graphic, CPU, Graphic+CPU / 2
		// Martin Sich ID = 1
		database.insertIntoExamples(
				1,
				"Medien-PC",
				"10.03.12",
				"650 Euro",
				"pc1",
				"Dieser PC ist durch die Verwendung eines Cube-Gehäuses leicht in ein TV-Schrank integrierbar. Er eignet sich, um Filme in HD-Qualität anzuschauen. Der Prozessor ist leistungsstark aber auch stromsparend. Für das Surfen im Internet und das Schauen von Videos ist dieser PC ein idealer Begleiter. ",
				"\"Ich bin voll und ganz zufrieden mit dem PC. Ich habe gesagt was er machen bzw. leisten soll und das tut er auch. Er ist schnell, leise und sieht auch noch gut aus! Jederzeit wieder!\"", "370", "0", "120", "60", "2", "3", "2.5");

		// Philipp ID = 2
		database.insertIntoExamples(2, "Gamer-PC", "29.04.11", "970 Euro",
				"pc2", "Dieser Gamer-PC eignet sich für aktuelle Spiele. Die Marke EVGA steht für Qualität und Zuverlässigkeit. EVGA gibt Garantie auf einen Kühler Wechsel und das Übertakten der Grafikkarte. Der PC besitzt eine SSD für das Betriebssystem und eine 1 TerraByte Festplatte für Daten. Damit der PC auch unter Vollast kühl bleibt, wurden zahlreiche bequeit! Gehäuselüfter verbaut, die über eine Scythe Lüftersteuerung reguliert werden können. Die Lüftersteuerung besitzt 4  Wärmesensoren, die an verschiedenen Stellen im Gehäuse untergebracht sind." ,
				"", "830", "0", "150", "0", "2.5", "3.5", "3");
		// Kevin ID = 3
		database.insertIntoExamples(3, "Gamer-PC", "17.12.10", "700 Euro",
				"pc3", "Der Gamer-PC wurde zusammengestellt, um das zu diesem Zeitpunkt noch nicht erschiene Diablo 3 zu spielen. Nach dem Erscheinen (04.2012) des Spiels wurde bestätigt, dass der PC den Anforderungen gewachsen ist und das Spiel mit mittleren - hohen Details spielbar ist.", "", "600",
				"0", "100", "0", "2.5", "3.5", "3");
		// PC Mama und Papa = 4
		database.insertIntoExamples(4, "Office-PC", "16.12.10", "380 Euro",
				"pc4", "Der Käufer dieses PCs möchte hauptsächlich im Internet surfen. Außerdem soll die Möglichkeit bestehen neben dem Monitor noch ein LCD-Fernseher anzuschließen. Dies wurde durch abgestimmte Komponenten mit einem Intel Core i3 Prozessor realisiert. Der Prozessor ist stromsparend und die Leistung ist für das Surfen im Internet mehr als genug. Die intigrierte HD 2000 Grafik ermöglicht auch das Betreiben von einem weiteren Bildschirm.", "",
				"340", "0", "40", "0", "1", "1.5", "1.5");
		// PC Polaczek = 5
		database.insertIntoExamples(5, "Office-PC", "07.06.10", "300 Euro",
				"pc5", "Dieser PC sollte vorallem preiswert sein. Der PC reicht für das Surfen im Internet und Office-Anwendungen. Aktuelle Computerspiele sind mit diesem PC nicht spielbar.", "",
				"190", "60", "50", "0", "1", "1.5", "1.5");
		// PC Christian G = 6
		long examplesInserted = database.insertIntoExamples(6, "Highend-PC",
				"01.06.12", "2100 Euro", "pc6", "Dieser PC möchte gerne gefordert werden. Die High-End-Komponenten haben genug Leistungsreserven, um auch noch die nächsten zwei Jahre völlig auszureichen, ohne das man an einen Austausch von Komponenten denken muss. Dem Käufer war besonders die Lautstärke ein wichtiger Faktor. Aus diesem Grund wurde ein bereits gedämmtes Gehäuse verwendet und ausschließlich Silent-Lüfter verbaut, Der PC ist selbst bei hoher Beanspruchung kaum hörbar. ",
				"", "1500", "100", "150", "350", "4.5",
				"5", "4.5");

		return examplesInserted;
	}

	private long insertBenchmark() {

		Log.i("INSERTINTOBENCHMARK", "insertIntoBenchmark is called");

		/*
		 * CPU RATING 10 - 7 = 3 8- 7 = 2.5 6 - 5 = 2.0 4 - 3 = 1,5 2 - 1 = 1 1
		 * - 0 = 0. 5
		 */

		/*
		 * GRAPHIC RATING 40 - 30 = 3 29 - 25 = 2.5 24 - 20 = 2.0 19 - 10 = 1.5
		 * 9 - 5 = 1.0 4.9 - 0 = 0.5
		 */

		// Martin Sich
		database.insertIntoBenchmark(1, 1, "Cinebench 11.5", "GRAPHIC", "1");
		database.insertIntoBenchmark(2, 1, "Cinebench 11.5", "CPU", "1.5");

		// Philipp
		database.insertIntoBenchmark(3, 2, "Cinebench 11.5", "GRAPHIC", "2");
		database.insertIntoBenchmark(4, 2, "Cinebench 11.5", "CPU", "2.0");

		// Kevin
		database.insertIntoBenchmark(5, 3, "Cinebench 11.5", "GRAPHIC", "2");
		database.insertIntoBenchmark(6, 3, "Cinebench 11.5", "CPU", "2");

		// Mama und Papa
		database.insertIntoBenchmark(7, 4, "Cinebench 11.5", "CPU", "1.5");
		database.insertIntoBenchmark(8, 4, "Cinebench 11.5", "GRAPHIC", "1");

		// Polaczek
		database.insertIntoBenchmark(9, 5, "Cincebench 11.5", "GRAPHIC", "0.5");
		long benchmarkInserted = database.insertIntoBenchmark(10, 5,
				"Cincebench 11.5", "CPU", "1");

		return benchmarkInserted;
	}

	private long insertHardware() {

		Log.i("INSERINTOHARDWARE", "insertHardware is called");

		long hardwareInserted = 0;

		try {

			database.insertIntoHardware(1,
					"Intel Core i3 2120 2x 3.30Ghz So. 1115", "PROCESSOR");
			database.insertIntoHardware(2,
					"HD 2000 Sandy Bridge (Grafik im Prozessor)", "GRAPHIC");
			database.insertIntoHardware(3, "Asus P8H61-M", "MAINBOARD");
			database.insertIntoHardware(4, "4GB Kingston ValueRam DDR3-1333",
					"RAM");
			database.insertIntoHardware(5, "1TB Samsung F3 HD103SJ", "HARDDISK");
			database.insertIntoHardware(6,
					"be quiet! Pure Power L7 80+  350 Watt Bronze",
					"POWERSUPPLY");
			database.insertIntoHardware(7, "EVGA I-P55 LE P55 S1156 ATX",
					"MAINBOARD");
			database.insertIntoHardware(8, "EVGA Geforce GTX 460 SE 1024MB",
					"GRAPHIC");
			database.insertIntoHardware(9, "8GB G.Skill Ripjaws DD3-1333",
					"RAM");
			database.insertIntoHardware(10,
					"64GB Crucial C300 Series 2.5 SATA", "HARDDISK");
			database.insertIntoHardware(11,
					"be quiet! System Power BQT S6 80+ 550 Watt", "POWERSUPPLY");
			database.insertIntoHardware(12, "Scythe Mugen 2", "CPUCOOLER");
			database.insertIntoHardware(13, "Intel Core i5 4x2.80GHz So. 1156",
					"PROCESSOR");
			database.insertIntoHardware(14, "1TB Samsung EcoGreen F2 HD103SI",
					"HARDDISK");
			database.insertIntoHardware(15, "Asus P7P55D Pro P55 S1156 ATX",
					"MAINBOARD");
			database.insertIntoHardware(16, "Intel Core i5 650 2x 3.20GHz",
					"PROCESSOR");
			database.insertIntoHardware(17, "Geforce GTX 460 Zotac 768MB",
					"GRAPHIC");
			database.insertIntoHardware(18, "1TB Samsung Spinpoint F3 HD104SJ",
					"HARDDISK");
			database.insertIntoHardware(19,
					"Antec High Current Gamer ATX2.3 520 Watt", "POWERSUPPLY");
			database.insertIntoHardware(20, "Artic Cooling Alpine 11 S775",
					"CPUCOOLER");
			database.insertIntoHardware(21, "4GB Kingston ValueRam DDR3-1066",
					"RAM");
			database.insertIntoHardware(22,
					"500GB Samsung Spinpoint F3 HD502HJ", "HARDDISK");
			database.insertIntoHardware(23,
					"Intel Core i3 540 2x 3.06GHz So. 1156", "PROCESSOR");
			database.insertIntoHardware(24, "Gigabyte GA-H55M-D2H H55 S1156",
					"MAINBOARD");
			/*
			 * Extras
			 */
			database.insertIntoHardware(
					25,
					"Durch die Verwendung einer SSD-Festplatte startet der PC sehr schnell",
					"EXTRAS");
			database.insertIntoHardware(26,
					"be quiet! System Power S6 80+ 300 Watt", "POWERSUPPLY");
			database.insertIntoHardware(27, "AMD Athlon X2 5200+ 2.7GHz AM2",
					"PROCESSOR");
			database.insertIntoHardware(28,
					"Gigabyte GA-M68M-S2P nForce 630A AM2 ATX +", "MAINBOARD");
			database.insertIntoHardware(29, "2GB Kingston ValueRam DDR2.667",
					"RAM");
			database.insertIntoHardware(30, "160GB Hitachi Deskstar 7K1000.C",
					"HARDDISK");
			database.insertIntoHardware(31, "Onboard-Grafik", "GRAPHIC");
			database.insertIntoHardware(32,
					"Intel Core i7 3770K 4x 3.50GHz So. 1155", "PROCESSOR");
			database.insertIntoHardware(33, "240GB Kingston HyperX 3K",
					"HARDDISK");
			database.insertIntoHardware(34,
					"be quiet! Straight Power CM E9 80+ 580 Watt",
					"POWERSUPPLY");
			database.insertIntoHardware(35, "be queit! Dark Rock PRO 2",
					"CPUCOOLER");
			database.insertIntoHardware(36, "Asus Sabertooth Z77 So. 1155",
					"MAINBOARD");
			database.insertIntoHardware(37,
					"16GB G.Skill Ares DD3-1866 DIMM CL10 Dual", "RAM");
			database.insertIntoHardware(38, "Geforce GTX 670 Palit Jetstream",
					"GRAPHIC");
			database.insertIntoHardware(39, "Asus XONAR D2X PCIe 7.1",
					"SOUNDCARD");
			database.insertIntoHardware(40, "Kartenlesegerät", "EXTRAS");
			database.insertIntoHardware(41, "Blu-ray Brenner", "EXTRAS");
			database.insertIntoHardware(42, "Sennheiser PC 360 Gaming Headset",
					"EXTRAS");

			hardwareInserted = database.insertIntoHardware(31,
					"Arctic Cooling Alpine 64 GT ", "CPUCOOLER");

		} catch (SQLiteException e) {
			e.printStackTrace();
		}

		return hardwareInserted;
	}

	private long insertHardwareToExamples() {

		Log.i("INSERTINTOHARDWARETOEXAMPLES",
				"insertHardwareToExampes is called");

		// Martin Sich
		database.insertIntoHardwareToExamples(1, 1);
		database.insertIntoHardwareToExamples(1, 2);
		database.insertIntoHardwareToExamples(1, 3);
		database.insertIntoHardwareToExamples(1, 4);
		database.insertIntoHardwareToExamples(1, 5);
		database.insertIntoHardwareToExamples(1, 6);
		// Philipp R�se
		database.insertIntoHardwareToExamples(2, 7);
		database.insertIntoHardwareToExamples(2, 8);
		database.insertIntoHardwareToExamples(2, 9);
		database.insertIntoHardwareToExamples(2, 10);
		database.insertIntoHardwareToExamples(2, 11);
		database.insertIntoHardwareToExamples(2, 12);
		database.insertIntoHardwareToExamples(2, 13);
		database.insertIntoHardwareToExamples(2, 14);
		database.insertIntoHardwareToExamples(2, 25);
		// Kevin Ernst
		database.insertIntoHardwareToExamples(3, 15);
		database.insertIntoHardwareToExamples(3, 16);
		database.insertIntoHardwareToExamples(3, 17);
		database.insertIntoHardwareToExamples(3, 18);
		database.insertIntoHardwareToExamples(3, 19);
		database.insertIntoHardwareToExamples(3, 4);
		database.insertIntoHardwareToExamples(3, 20);
		// Mama und Papa
		database.insertIntoHardwareToExamples(4, 2);
		database.insertIntoHardwareToExamples(4, 20);
		database.insertIntoHardwareToExamples(4, 21);
		database.insertIntoHardwareToExamples(4, 22);
		database.insertIntoHardwareToExamples(4, 23);
		database.insertIntoHardwareToExamples(4, 24);
		long hardwareToExamplesInserted = database
				.insertIntoHardwareToExamples(4, 26);
		// Polaczek
		database.insertIntoHardwareToExamples(5, 26);
		database.insertIntoHardwareToExamples(5, 27);
		database.insertIntoHardwareToExamples(5, 28);
		database.insertIntoHardwareToExamples(5, 29);
		database.insertIntoHardwareToExamples(5, 30);
		database.insertIntoHardwareToExamples(5, 31);

		// Christian G.
		database.insertIntoHardwareToExamples(6, 32);
		database.insertIntoHardwareToExamples(6, 33);
		database.insertIntoHardwareToExamples(6, 34);
		database.insertIntoHardwareToExamples(6, 35);
		database.insertIntoHardwareToExamples(6, 36);
		database.insertIntoHardwareToExamples(6, 37);
		database.insertIntoHardwareToExamples(6, 38);
		database.insertIntoHardwareToExamples(6, 39);
		database.insertIntoHardwareToExamples(6, 40);
		database.insertIntoHardwareToExamples(6, 41);
		database.insertIntoHardwareToExamples(6, 42);

		return hardwareToExamplesInserted;
	}

	private long insertIntoGalleryPictures() {

		long galleryPicturesInserted = 0;
		
		/**
		 * Martin Sich
		 */
		database.insertIntoGalleryPictures(1, 1, "pcg11", "PC ohne Seitenabdeckung");
		database.insertIntoGalleryPictures(2, 1, "pcg12", "PC ohne Seitenabdeckung");
	    database.insertIntoGalleryPictures(3, 1, "pcg13", "PC ohne Seitenabdeckung");
	    
	    /**
	     * Kevin Ernst
	     */
	    database.insertIntoGalleryPictures(4, 3, "pcg31", "Innenleben");
	    
	    /**
	     * Mama und Papa
	     * 
	     */
	    database.insertIntoGalleryPictures(5, 4, "pcg41", "PC von der Seite");
	    database.insertIntoGalleryPictures(6, 4, "pcg42", "CPU Kühler");
	    
	    /**
	     * Christian
	     */
		database.insertIntoGalleryPictures(7, 6, "pcg61", "PC von der Seite");
		

		return galleryPicturesInserted;
	}
	private long insertIntoQuestions() {
		
		long questionsInserted = 0;
		
		database.insertIntoQuestions(1, "Welche der folgenden Tätigkeiten werden sie hauptsächlich nachgehen?");
		database.insertIntoQuestions(2, "Benötigen sie weiteres Zubehör?");
		database.insertIntoQuestions(3, "Ist die Lautstärke des PCs wichtig? Hier gibt es viele Möglichkeiten die Lautstärke zu reduzieren (Silent-Gehäuse, Silent-Lüfter, Wasserkühlung).");
		database.insertIntoQuestions(4, "Soll der PC an eine bestehende Soundanlage angeschlossen werden?");
		database.insertIntoQuestions(5, "Soll der PC besonders schnell hochfahren?");
		database.insertIntoQuestions(6, "Wie viel Speicherplatz benötigen Sie?");
		database.insertIntoQuestions(7, "Ist es wichtig, dass der PC in ein kleines Gehäuse passt?");
		database.insertIntoQuestions(8, "Welches Betriebssystem bevorzugen Sie?");
		database.insertIntoQuestions(9, "Soll Ihr PC mehr als zwei Monitore gleichzeitig ansteuern können");
		questionsInserted = database.insertIntoQuestions(10, "Ist es für sie wichtig, dass ihr PC sehr stromsparend ist?");
		
		return questionsInserted;
	}
	
	private long insertIntoAnswers() {
		
		long answersInserted = 0;
		database.insertIntoAnswers(1, 1, "Webseiten besuchen, E-Mails lesen und Office-Progamme benutzen.");
		database.insertIntoAnswers(2, 1, "Filme schauen, Medien (CD, DVD, Blu-ray) brennen und Spiele mit niedrigen bzw. mittleren Details spielen.");
		database.insertIntoAnswers(3, 1, "Virtualisierung, Audio-/Videobearbeitung und aktuelle Spiele mit hohen Details spielen.");
		database.insertIntoAnswers(4, 2, "Nein");
		database.insertIntoAnswers(5, 2, "JA (Z.B. Monitor, Drucker, Wlan-Stick, Kartenlesegerät, Maus und Tastatur.");
		database.insertIntoAnswers(6, 3, "Nein, nicht wichtig.");
		database.insertIntoAnswers(7, 3, "Ja, aber nur bis zu gewissen Mehrkosten.");
		database.insertIntoAnswers(8, 3, "Ja, sehr wichtig.");
		database.insertIntoAnswers(9, 4, "Nein.");
		database.insertIntoAnswers(10, 4, "Ja.");
		database.insertIntoAnswers(11, 5, "Nein.");
		database.insertIntoAnswers(12, 5, "Ja.");
		database.insertIntoAnswers(13, 6, "<500GB.");
		database.insertIntoAnswers(14, 6, "<2000GB.");
		database.insertIntoAnswers(15, 6, ">2000GB.");
		database.insertIntoAnswers(16, 7, "Nein.");
		database.insertIntoAnswers(17, 7, "Ja.");
		database.insertIntoAnswers(18, 8, "Linux.");
		database.insertIntoAnswers(19, 8, "Mac.");
		database.insertIntoAnswers(20, 8, "Windows.");
		database.insertIntoAnswers(21, 9, "Nein.");
		database.insertIntoAnswers(22, 9, "Ja.");
		database.insertIntoAnswers(23, 10, "Nein.");
		answersInserted = database.insertIntoAnswers(24, 10, "Ja.");
		
		
		return answersInserted;
	}

	private void createListItems() {

		exampleCursor = database.getExamples();
		List<Example> mExamples = new ArrayList<Example>();

		try {

			while (exampleCursor.moveToNext()) {

				int idFromDB = exampleCursor.getInt(0);
				String name = exampleCursor.getString(1);
				String date = exampleCursor.getString(2);
				String price = exampleCursor.getString(3);
				String pictureurl = exampleCursor.getString(4);
				String description = exampleCursor.getString(5);
				String comment = exampleCursor.getString(6);
				String hardwareCosts = exampleCursor.getString(7);
				String softwareCosts = exampleCursor.getString(8);
				String consultingCosts = exampleCursor.getString(9);
				String extraCosts = exampleCursor.getString(10);
				String benchmark = exampleCursor.getString(11);
				String benchmarkCpu = exampleCursor.getString(12);
				String benchmarkGraphic = exampleCursor.getString(13);

				int path = getResources().getIdentifier(pictureurl, "drawable",
						"de.schlinke_marius");
				Drawable picturePC = getResources().getDrawable(path);
				
				mExamples.add(new Example(picturePC, idFromDB, name, date,
						price, pictureurl, description, comment, hardwareCosts,
						softwareCosts, consultingCosts, extraCosts, benchmark,
						benchmarkCpu, benchmarkGraphic));

			}
		} catch (SQLiteException e) {
			e.printStackTrace();
		} catch (NullPointerException e) {
			e.printStackTrace();
			Log.i("CREATELIST", "Nullpointer  Drawable");
		} finally {
			exampleCursor.close();
			database.close();
		}
		MSComputerApplication mscApplication = (MSComputerApplication) getApplication();
		AppContainer container = mscApplication.getGlobalData();
		container.deleteExamples();

		container.addExamples(mExamples);
		Log.i("START", "EXAMPLES SIZE" + container.getCount());
	}
}
